{"openapi":"3.1.0","info":{"title":"Tropocast API","description":"Independent VHF/UHF tropospheric propagation forecast API.","version":"1.28.0"},"paths":{"/api/v1/device/status":{"get":{"tags":["Device API"],"summary":"Read device API availability","operationId":"device_api_status_api_v1_device_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Device Api Status Api V1 Device Status Get"}}}}}}},"/api/v1/device/preview":{"post":{"tags":["Device API"],"summary":"Render a watermarked developer preview","operationId":"device_forecast_preview_api_v1_device_preview_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DevicePreviewOptions"}}},"required":true},"responses":{"200":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/device/forecast":{"get":{"tags":["Device API"],"summary":"List small forecast images for an embedded device","operationId":"device_forecast_manifest_api_v1_device_forecast_get","security":[{"TropocastDeviceKey":[]}],"parameters":[{"name":"hours","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":900,"title":"Hours"}},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":85.0,"minimum":-85.0},{"type":"null"}],"title":"Lat"}},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":180.0,"minimum":-180.0},{"type":"null"}],"title":"Lon"}},{"name":"country","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":2,"maxLength":2},{"type":"null"}],"title":"Country"}},{"name":"source","in":"query","required":false,"schema":{"enum":["auto","icon-eu","gdps"],"type":"string","default":"auto","title":"Source"}},{"name":"orientation","in":"query","required":false,"schema":{"anyOf":[{"enum":["landscape","portrait","square"],"type":"string"},{"type":"null"}],"title":"Orientation"}},{"name":"aspect_ratio","in":"query","required":false,"schema":{"anyOf":[{"enum":["16:9","4:3","1:1","9:16","3:4"],"type":"string"},{"type":"null"}],"title":"Aspect Ratio"}},{"name":"size","in":"query","required":false,"schema":{"type":"string","pattern":"^\\d{2,4}x\\d{2,4}$","default":"320x240","title":"Size"}},{"name":"radius_km","in":"query","required":false,"schema":{"type":"number","maximum":3500.0,"minimum":25.0,"default":350.0,"title":"Radius Km"}},{"name":"format","in":"query","required":false,"schema":{"enum":["jpeg","png"],"type":"string","default":"jpeg","title":"Format"}},{"name":"delivery","in":"query","required":false,"schema":{"enum":["frames","gif"],"type":"string","default":"frames","title":"Delivery"}},{"name":"renderer","in":"query","required":false,"schema":{"enum":["prepared-image","interactive-map"],"type":"string","default":"interactive-map","title":"Renderer"}},{"name":"title","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Title"}},{"name":"model_name","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Model Name"}},{"name":"time","in":"query","required":false,"schema":{"enum":["off","header","top","bottom"],"type":"string","default":"bottom","title":"Time"}},{"name":"timezone","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":1,"maxLength":64},{"type":"null"}],"title":"Timezone"}},{"name":"time_size","in":"query","required":false,"schema":{"anyOf":[{"enum":["small","normal","large"],"type":"string"},{"type":"null"}],"title":"Time Size"}},{"name":"scale","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Scale"}},{"name":"marker","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Marker"}},{"name":"frame_duration_ms","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":250,"default":1000,"title":"Frame Duration Ms"}},{"name":"loop","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Loop"}},{"name":"labels","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"deprecated":true,"title":"Labels"},"deprecated":true}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Device Forecast Manifest Api V1 Device Forecast Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/device/frames/{forecast_hour}.{image_format}":{"get":{"tags":["Device API"],"summary":"Download one small forecast image","operationId":"device_forecast_image_api_v1_device_frames__forecast_hour___image_format__get","security":[{"TropocastDeviceKey":[]}],"parameters":[{"name":"forecast_hour","in":"path","required":true,"schema":{"type":"integer","title":"Forecast Hour"}},{"name":"image_format","in":"path","required":true,"schema":{"enum":["jpeg","png"],"type":"string","title":"Image Format"}},{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":85.0,"minimum":-85.0,"title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180.0,"minimum":-180.0,"title":"Lon"}},{"name":"source","in":"query","required":true,"schema":{"enum":["icon-eu","gdps"],"type":"string","title":"Source"}},{"name":"run","in":"query","required":true,"schema":{"type":"string","minLength":10,"maxLength":32,"title":"Run"}},{"name":"size","in":"query","required":false,"schema":{"type":"string","pattern":"^\\d{2,4}x\\d{2,4}$","default":"320x240","title":"Size"}},{"name":"radius_km","in":"query","required":false,"schema":{"type":"number","maximum":3500.0,"minimum":25.0,"default":350.0,"title":"Radius Km"}},{"name":"title","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Title"}},{"name":"model_name","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Model Name"}},{"name":"time","in":"query","required":false,"schema":{"enum":["off","header","top","bottom"],"type":"string","default":"bottom","title":"Time"}},{"name":"timezone","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":64,"default":"UTC","title":"Timezone"}},{"name":"time_size","in":"query","required":false,"schema":{"enum":["small","normal","large"],"type":"string","default":"normal","title":"Time Size"}},{"name":"scale","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Scale"}},{"name":"marker","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Marker"}},{"name":"viewport","in":"query","required":false,"schema":{"enum":["radius","icon-eu-domain"],"type":"string","default":"radius","title":"Viewport"}},{"name":"renderer","in":"query","required":false,"schema":{"enum":["prepared-image","interactive-map"],"type":"string","default":"interactive-map","title":"Renderer"}},{"name":"labels","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"deprecated":true,"title":"Labels"},"deprecated":true}],"responses":{"200":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/device/animation.gif":{"get":{"tags":["Device API"],"summary":"Download a small animated forecast GIF","operationId":"device_forecast_animation_api_v1_device_animation_gif_get","security":[{"TropocastDeviceKey":[]}],"parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":85.0,"minimum":-85.0,"title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180.0,"minimum":-180.0,"title":"Lon"}},{"name":"source","in":"query","required":true,"schema":{"enum":["icon-eu","gdps"],"type":"string","title":"Source"}},{"name":"run","in":"query","required":true,"schema":{"type":"string","minLength":10,"maxLength":32,"title":"Run"}},{"name":"hours","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":160,"title":"Hours"}},{"name":"size","in":"query","required":false,"schema":{"type":"string","pattern":"^\\d{2,4}x\\d{2,4}$","default":"320x240","title":"Size"}},{"name":"radius_km","in":"query","required":false,"schema":{"type":"number","maximum":3500.0,"minimum":25.0,"default":350.0,"title":"Radius Km"}},{"name":"title","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Title"}},{"name":"model_name","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Model Name"}},{"name":"time","in":"query","required":false,"schema":{"enum":["off","header","top","bottom"],"type":"string","default":"bottom","title":"Time"}},{"name":"timezone","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":64,"default":"UTC","title":"Timezone"}},{"name":"time_size","in":"query","required":false,"schema":{"enum":["small","normal","large"],"type":"string","default":"normal","title":"Time Size"}},{"name":"scale","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Scale"}},{"name":"marker","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Marker"}},{"name":"viewport","in":"query","required":false,"schema":{"enum":["radius","icon-eu-domain"],"type":"string","default":"radius","title":"Viewport"}},{"name":"renderer","in":"query","required":false,"schema":{"enum":["prepared-image","interactive-map"],"type":"string","default":"interactive-map","title":"Renderer"}},{"name":"frame_duration_ms","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":250,"default":1000,"title":"Frame Duration Ms"}},{"name":"loop","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Loop"}}],"responses":{"200":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/developer/session":{"get":{"tags":["Developer Portal"],"summary":"Session Status","operationId":"session_status_api_v1_developer_session_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Session Status Api V1 Developer Session Get"}}}}}}},"/api/v1/developer/auth/request":{"post":{"tags":["Developer Portal"],"summary":"Request Login","operationId":"request_login_api_v1_developer_auth_request_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Request Login Api V1 Developer Auth Request Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/developer/auth/google":{"post":{"tags":["Developer Portal"],"summary":"Google Login","operationId":"google_login_api_v1_developer_auth_google_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GoogleLoginRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Google Login Api V1 Developer Auth Google Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/developer/auth/logout":{"post":{"tags":["Developer Portal"],"summary":"Logout","operationId":"logout_api_v1_developer_auth_logout_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Logout Api V1 Developer Auth Logout Post"}}}}}}},"/api/v1/developer/passkeys/registration/options":{"post":{"tags":["Developer Portal"],"summary":"Passkey Registration Options","operationId":"passkey_registration_options_api_v1_developer_passkeys_registration_options_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Passkey Registration Options Api V1 Developer Passkeys Registration Options Post"}}}}}}},"/api/v1/developer/passkeys/registration/verify":{"post":{"tags":["Developer Portal"],"summary":"Verify Passkey Registration","operationId":"verify_passkey_registration_api_v1_developer_passkeys_registration_verify_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PasskeyRegistrationRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Verify Passkey Registration Api V1 Developer Passkeys Registration Verify Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/developer/passkeys/authentication/options":{"post":{"tags":["Developer Portal"],"summary":"Passkey Authentication Options","operationId":"passkey_authentication_options_api_v1_developer_passkeys_authentication_options_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Passkey Authentication Options Api V1 Developer Passkeys Authentication Options Post"}}}}}}},"/api/v1/developer/passkeys/authentication/verify":{"post":{"tags":["Developer Portal"],"summary":"Verify Passkey Authentication","operationId":"verify_passkey_authentication_api_v1_developer_passkeys_authentication_verify_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PasskeyAuthenticationRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Verify Passkey Authentication Api V1 Developer Passkeys Authentication Verify Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/developer/passkeys/recovery":{"post":{"tags":["Developer Portal"],"summary":"Verify Recovery Code","operationId":"verify_recovery_code_api_v1_developer_passkeys_recovery_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecoveryCodeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Verify Recovery Code Api V1 Developer Passkeys Recovery Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/developer/passkeys":{"get":{"tags":["Developer Portal"],"summary":"List Passkeys","operationId":"list_passkeys_api_v1_developer_passkeys_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response List Passkeys Api V1 Developer Passkeys Get"}}}}}}},"/api/v1/developer/passkeys/recovery-codes":{"post":{"tags":["Developer Portal"],"summary":"Regenerate Recovery Codes","operationId":"regenerate_recovery_codes_api_v1_developer_passkeys_recovery_codes_post","responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Regenerate Recovery Codes Api V1 Developer Passkeys Recovery Codes Post"}}}}}}},"/api/v1/developer/passkeys/{passkey_id}":{"delete":{"tags":["Developer Portal"],"summary":"Delete Passkey","operationId":"delete_passkey_api_v1_developer_passkeys__passkey_id__delete","parameters":[{"name":"passkey_id","in":"path","required":true,"schema":{"type":"string","title":"Passkey Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Delete Passkey Api V1 Developer Passkeys Passkey Id Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/developer/projects":{"get":{"tags":["Developer Portal"],"summary":"List Projects","operationId":"list_projects_api_v1_developer_projects_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response List Projects Api V1 Developer Projects Get"}}}}}},"post":{"tags":["Developer Portal"],"summary":"Create Project","operationId":"create_project_api_v1_developer_projects_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Create Project Api V1 Developer Projects Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/developer/projects/{project_id}/credentials":{"post":{"tags":["Developer Portal"],"summary":"Create Credential","operationId":"create_credential_api_v1_developer_projects__project_id__credentials_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Create Credential Api V1 Developer Projects Project Id Credentials Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/developer/credentials/{credential_id}/rotate":{"post":{"tags":["Developer Portal"],"summary":"Rotate Credential","operationId":"rotate_credential_api_v1_developer_credentials__credential_id__rotate_post","parameters":[{"name":"credential_id","in":"path","required":true,"schema":{"type":"string","title":"Credential Id"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Rotate Credential Api V1 Developer Credentials Credential Id Rotate Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/developer/credentials/{credential_id}":{"delete":{"tags":["Developer Portal"],"summary":"Revoke Credential","operationId":"revoke_credential_api_v1_developer_credentials__credential_id__delete","parameters":[{"name":"credential_id","in":"path","required":true,"schema":{"type":"string","title":"Credential Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Revoke Credential Api V1 Developer Credentials Credential Id Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/developer/admin/projects":{"get":{"tags":["Developer Portal"],"summary":"Admin Projects","operationId":"admin_projects_api_v1_developer_admin_projects_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Admin Projects Api V1 Developer Admin Projects Get"}}}}}}},"/api/v1/developer/admin/statistics":{"get":{"tags":["Developer Portal"],"summary":"Admin Statistics","operationId":"admin_statistics_api_v1_developer_admin_statistics_get","parameters":[{"name":"hours","in":"query","required":false,"schema":{"type":"integer","maximum":744,"minimum":1,"default":24,"title":"Hours"}},{"name":"source","in":"query","required":false,"schema":{"enum":["all","icon-eu","gdps"],"type":"string","default":"all","title":"Source"}},{"name":"area","in":"query","required":false,"schema":{"enum":["all","europe","poland","united-kingdom","germany","france","spain","italy","czechia","croatia","world"],"type":"string","default":"all","title":"Area"}},{"name":"category","in":"query","required":false,"schema":{"enum":["all","embed_forecast","interactive_map","api"],"type":"string","default":"all","title":"Category"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Admin Statistics Api V1 Developer Admin Statistics Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/developer/admin/api-usage":{"get":{"tags":["Developer Portal"],"summary":"Admin Api Usage","operationId":"admin_api_usage_api_v1_developer_admin_api_usage_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":90,"minimum":1,"default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Admin Api Usage Api V1 Developer Admin Api Usage Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/developer/admin/projects/{project_id}/approve":{"post":{"tags":["Developer Portal"],"summary":"Approve Project","operationId":"approve_project_api_v1_developer_admin_projects__project_id__approve_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Approve Project Api V1 Developer Admin Projects Project Id Approve Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/embed/forecast/current":{"get":{"tags":["Public no-JavaScript embed"],"summary":"Current rendered forecast image for no-JavaScript embeds","operationId":"public_embed_current_frame_api_v1_embed_forecast_current_get","parameters":[{"name":"source","in":"query","required":false,"schema":{"enum":["icon-eu","gdps"],"type":"string","default":"icon-eu","title":"Source"}},{"name":"area","in":"query","required":false,"schema":{"enum":["europe","poland","united-kingdom","germany","france","spain","italy","czechia","croatia"],"type":"string","default":"europe","title":"Area"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/embed/forecast/animation":{"get":{"tags":["Public no-JavaScript embed"],"summary":"Bounded animated forecast image for no-JavaScript embeds","operationId":"public_embed_forecast_animation_api_v1_embed_forecast_animation_get","parameters":[{"name":"source","in":"query","required":false,"schema":{"enum":["icon-eu","gdps"],"type":"string","default":"icon-eu","title":"Source"}},{"name":"area","in":"query","required":false,"schema":{"enum":["europe","poland","united-kingdom","germany","france","spain","italy","czechia","croatia"],"type":"string","default":"europe","title":"Area"}},{"name":"speed","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":400,"default":1300,"title":"Speed"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/device/timezones":{"get":{"tags":["Text forecast API"],"summary":"List supported IANA time zones","operationId":"text_timezones_api_v1_device_timezones_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Text Timezones Api V1 Device Timezones Get"}}}}}}},"/api/v1/device/text-forecast":{"get":{"tags":["Text forecast API"],"summary":"Read localized propagation text and alerts","operationId":"text_forecast_api_v1_device_text_forecast_get","security":[{"TropocastDeviceKey":[]}],"parameters":[{"name":"country","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":2,"maxLength":2},{"type":"null"}],"description":"PL, GB, DE, FR, ES, IT, CZ, HR or EU. Country-centred circle, not a country polygon. EU selects the entire ICON-EU domain. Mutually exclusive with lat/lon.","title":"Country"},"description":"PL, GB, DE, FR, ES, IT, CZ, HR or EU. Country-centred circle, not a country polygon. EU selects the entire ICON-EU domain. Mutually exclusive with lat/lon."},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":85,"minimum":-85},{"type":"null"}],"description":"WGS84 latitude. Supply both lat and lon, without country.","title":"Lat"},"description":"WGS84 latitude. Supply both lat and lon, without country."},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":180,"minimum":-180},{"type":"null"}],"description":"WGS84 longitude of the circle centre.","title":"Lon"},"description":"WGS84 longitude of the circle centre."},{"name":"radius_km","in":"query","required":false,"schema":{"type":"number","maximum":3500,"minimum":25,"description":"Distance from the selected country centre or exact coordinates. EU uses the full domain and a nominal 3000 km radius.","default":350,"title":"Radius Km"},"description":"Distance from the selected country centre or exact coordinates. EU uses the full domain and a nominal 3000 km radius."},{"name":"source","in":"query","required":false,"schema":{"enum":["auto","icon-eu","gdps"],"type":"string","description":"auto selects one model covering the whole area. No stitched hybrid statistics.","default":"auto","title":"Source"},"description":"auto selects one model covering the whole area. No stitched hybrid statistics."},{"name":"hours","in":"query","required":false,"schema":{"type":"string","maxLength":64,"description":"1–12 unique comma-separated hour offsets from now, 0–240. Only published terms are available; missing terms are reported separately.","default":"0,3,6,9,12,24","title":"Hours"},"description":"1–12 unique comma-separated hour offsets from now, 0–240. Only published terms are available; missing terms are reported separately."},{"name":"period","in":"query","required":false,"schema":{"enum":["hours","now","today","tomorrow","next_24h","next_48h","next_72h","custom","next_3days"],"type":"string","description":"hours: explicit offsets (backward compatible). now, today, tomorrow, next_24h, next_48h, next_72h, next_3days (today plus 2 local calendar days) or custom. Response messages state the period.","default":"hours","title":"Period"},"description":"hours: explicit offsets (backward compatible). now, today, tomorrow, next_24h, next_48h, next_72h, next_3days (today plus 2 local calendar days) or custom. Response messages state the period."},{"name":"start_hour","in":"query","required":false,"schema":{"type":"integer","maximum":240,"minimum":0,"description":"Custom window start offset from now.","default":0,"title":"Start Hour"},"description":"Custom window start offset from now."},{"name":"end_hour","in":"query","required":false,"schema":{"type":"integer","maximum":240,"minimum":0,"description":"Custom window end offset; must be >= start_hour and no more than 72 hours later.","default":24,"title":"End Hour"},"description":"Custom window end offset; must be >= start_hour and no more than 72 hours later."},{"name":"step_hours","in":"query","required":false,"schema":{"enum":["3","6","12"],"type":"string","description":"Sampling interval for time windows. Does not trigger new model calculations.","default":"3","title":"Step Hours"},"description":"Sampling interval for time windows. Does not trigger new model calculations."},{"name":"language","in":"query","required":false,"schema":{"enum":["pl","en","de","fr","es","it","cs","hr"],"type":"string","description":"Language of messages, independently of country and time zone.","default":"en","title":"Language"},"description":"Language of messages, independently of country and time zone."},{"name":"timezone","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":64,"description":"auto resolves the selected centre offline. Or IANA (Europe/Warsaw) with automatic DST; or fixed UTC+01:00 / UTC+02:00 with no seasonal changes. Machine timestamps remain UTC.","default":"UTC","title":"Timezone"},"description":"auto resolves the selected centre offline. Or IANA (Europe/Warsaw) with automatic DST; or fixed UTC+01:00 / UTC+02:00 with no seasonal changes. Machine timestamps remain UTC."},{"name":"time_format","in":"query","required":false,"schema":{"enum":["full","short"],"type":"string","description":"full: complete local date/time and zone. short: readable local clock time with today/tomorrow/date, concise period wording. Exact UTC/local/DST metadata is always returned.","default":"full","title":"Time Format"},"description":"full: complete local date/time and zone. short: readable local clock time with today/tomorrow/date, concise period wording. Exact UTC/local/DST metadata is always returned."},{"name":"dst_mode","in":"query","required":false,"schema":{"enum":["auto","summer","winter"],"type":"string","description":"auto follows IANA seasonal rules per instant. summer/winter force the highest/lowest offset observed in the resolved zone during the current local year, across the entire report. Same offset for zones without changes. Not combined with explicit fixed UTC offsets. Policy and reference year are returned in time_context.","default":"auto","title":"Dst Mode"},"description":"auto follows IANA seasonal rules per instant. summer/winter force the highest/lowest offset observed in the resolved zone during the current local year, across the entire report. Same offset for zones without changes. Not combined with explicit fixed UTC offsets. Policy and reference year are returned in time_context."},{"name":"merge_bands","in":"query","required":false,"schema":{"type":"boolean","description":"true: one shared 2 m / 70 cm row in each daily.bands array and daily/outlook text. false (default): separate 2m and 70cm rows. Presentation only; underlying samples, alerts and shared tropospheric model are unchanged.","default":false,"title":"Merge Bands"},"description":"true: one shared 2 m / 70 cm row in each daily.bands array and daily/outlook text. false (default): separate 2m and 70cm rows. Presentation only; underlying samples, alerts and shared tropospheric model are unchanged."},{"name":"message_format","in":"query","required":false,"schema":{"enum":["full","short"],"type":"string","description":"Short format for summary.message and alerts[].message; its event time is UTC.","default":"full","title":"Message Format"},"description":"Short format for summary.message and alerts[].message; its event time is UTC."},{"name":"ascii_only","in":"query","required":false,"schema":{"type":"boolean","description":"Transliterate summary.message and alerts[].message to ASCII; other JSON fields are unchanged.","default":false,"title":"Ascii Only"},"description":"Transliterate summary.message and alerts[].message to ASCII; other JSON fields are unchanged."},{"name":"max_message_bytes","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":4096,"minimum":1},{"type":"null"}],"description":"Check the UTF-8 byte limit per summary/alert message. To enforce it, also set truncate_message=true.","title":"Max Message Bytes"},"description":"Check the UTF-8 byte limit per summary/alert message. To enforce it, also set truncate_message=true."},{"name":"truncate_message","in":"query","required":false,"schema":{"type":"boolean","description":"When true and max_message_bytes is set, truncate messages at a valid UTF-8 boundary. The message_truncated and message_limit_exceeded flags report the result.","default":false,"title":"Truncate Message"},"description":"When true and max_message_bytes is set, truncate messages at a valid UTF-8 boundary. The message_truncated and message_limit_exceeded flags report the result."},{"name":"threshold","in":"query","required":false,"schema":{"type":"integer","maximum":95,"minimum":37,"description":"Alert threshold on the 0–100 model scale; not a reception probability.","default":65,"title":"Threshold"},"description":"Alert threshold on the 0–100 model scale; not a reception probability."},{"name":"label","in":"query","required":false,"schema":{"type":"string","maxLength":80,"pattern":"^[^\\x00-\\x1f\\x7f]*$","description":"Optional metadata label, not inserted in translated message text.","default":"","title":"Label"},"description":"Optional metadata label, not inserted in translated message text."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TextForecastResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/device/text-preview":{"post":{"tags":["Text forecast API"],"summary":"Preview synthetic or real localized alert messages","operationId":"text_preview_api_v1_device_text_preview_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreviewOptions"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TextForecastResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/device/propagation-chart":{"get":{"tags":["Propagation chart API"],"summary":"Propagation series, chart image and strongest forecast samples","operationId":"propagation_chart_api_v1_device_propagation_chart_get","security":[{"TropocastDeviceKey":[]}],"parameters":[{"name":"country","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":2,"maxLength":2},{"type":"null"}],"title":"Country"}},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":85,"minimum":-85},{"type":"null"}],"title":"Lat"}},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":180,"minimum":-180},{"type":"null"}],"title":"Lon"}},{"name":"radius_km","in":"query","required":false,"schema":{"type":"number","maximum":3500,"minimum":25,"default":350,"title":"Radius Km"}},{"name":"source","in":"query","required":false,"schema":{"enum":["auto","icon-eu","gdps"],"type":"string","default":"auto","title":"Source"}},{"name":"period","in":"query","required":false,"schema":{"enum":["hours","now","today","tomorrow","next_24h","next_48h","next_72h","custom","next_3days"],"type":"string","default":"next_72h","title":"Period"}},{"name":"start_hour","in":"query","required":false,"schema":{"type":"integer","maximum":240,"minimum":0,"default":0,"title":"Start Hour"}},{"name":"end_hour","in":"query","required":false,"schema":{"type":"integer","maximum":240,"minimum":0,"default":24,"title":"End Hour"}},{"name":"step_hours","in":"query","required":false,"schema":{"enum":["3","6","12"],"type":"string","default":"3","title":"Step Hours"}},{"name":"language","in":"query","required":false,"schema":{"enum":["pl","en","de","fr","es","it","cs","hr"],"type":"string","default":"en","title":"Language"}},{"name":"timezone","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":64,"default":"auto","title":"Timezone"}},{"name":"dst_mode","in":"query","required":false,"schema":{"enum":["auto","summer","winter"],"type":"string","default":"auto","title":"Dst Mode"}},{"name":"time_format","in":"query","required":false,"schema":{"enum":["full","short"],"type":"string","default":"short","title":"Time Format"}},{"name":"threshold","in":"query","required":false,"schema":{"type":"integer","maximum":95,"minimum":37,"default":65,"title":"Threshold"}},{"name":"size","in":"query","required":false,"schema":{"type":"string","pattern":"^\\d{2,4}x\\d{2,4}$","default":"320x240","title":"Size"}},{"name":"highlight_limit","in":"query","required":false,"schema":{"type":"integer","maximum":6,"minimum":1,"default":3,"title":"Highlight Limit"}},{"name":"highlight_gap_hours","in":"query","required":false,"schema":{"type":"integer","maximum":24,"minimum":3,"default":6,"title":"Highlight Gap Hours"}},{"name":"format","in":"query","required":false,"schema":{"enum":["json","png","jpeg"],"type":"string","default":"json","title":"Format"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/device/propagation-chart-preview":{"post":{"tags":["Propagation chart API"],"summary":"Watermarked synthetic or real chart preview","operationId":"chart_preview_api_v1_device_propagation_chart_preview_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChartPreview"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/device/propagation-best-map":{"get":{"tags":["Propagation chart API"],"summary":"Download the map at the strongest available forecast sample","operationId":"best_map_api_v1_device_propagation_best_map_get","security":[{"TropocastDeviceKey":[]}],"parameters":[{"name":"country","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":2,"maxLength":2},{"type":"null"}],"title":"Country"}},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":85,"minimum":-85},{"type":"null"}],"title":"Lat"}},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":180,"minimum":-180},{"type":"null"}],"title":"Lon"}},{"name":"radius_km","in":"query","required":false,"schema":{"type":"number","maximum":3500,"minimum":25,"default":350,"title":"Radius Km"}},{"name":"source","in":"query","required":false,"schema":{"enum":["auto","icon-eu","gdps"],"type":"string","default":"auto","title":"Source"}},{"name":"period","in":"query","required":false,"schema":{"enum":["hours","now","today","tomorrow","next_24h","next_48h","next_72h","custom","next_3days"],"type":"string","default":"next_72h","title":"Period"}},{"name":"start_hour","in":"query","required":false,"schema":{"type":"integer","maximum":240,"minimum":0,"default":0,"title":"Start Hour"}},{"name":"end_hour","in":"query","required":false,"schema":{"type":"integer","maximum":240,"minimum":0,"default":24,"title":"End Hour"}},{"name":"step_hours","in":"query","required":false,"schema":{"enum":["3","6","12"],"type":"string","default":"3","title":"Step Hours"}},{"name":"language","in":"query","required":false,"schema":{"enum":["pl","en","de","fr","es","it","cs","hr"],"type":"string","default":"en","title":"Language"}},{"name":"timezone","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":64,"default":"auto","title":"Timezone"}},{"name":"dst_mode","in":"query","required":false,"schema":{"enum":["auto","summer","winter"],"type":"string","default":"auto","title":"Dst Mode"}},{"name":"time_format","in":"query","required":false,"schema":{"enum":["full","short"],"type":"string","default":"short","title":"Time Format"}},{"name":"threshold","in":"query","required":false,"schema":{"type":"integer","maximum":95,"minimum":37,"default":65,"title":"Threshold"}},{"name":"size","in":"query","required":false,"schema":{"type":"string","pattern":"^\\d{2,4}x\\d{2,4}$","default":"320x240","title":"Size"}},{"name":"highlight_limit","in":"query","required":false,"schema":{"type":"integer","maximum":6,"minimum":1,"default":3,"title":"Highlight Limit"}},{"name":"highlight_gap_hours","in":"query","required":false,"schema":{"type":"integer","maximum":24,"minimum":3,"default":6,"title":"Highlight Gap Hours"}},{"name":"format","in":"query","required":false,"schema":{"enum":["png","jpeg"],"type":"string","default":"jpeg","title":"Format"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tropo/location-chart":{"post":{"tags":["Interactive map"],"summary":"Bounded real numerical chart for a map location","operationId":"location_chart_api_v1_tropo_location_chart_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LocationChartQuery"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/partner/installations":{"post":{"tags":["Partner access"],"summary":"Enroll an anonymous installation of an approved public application","operationId":"enroll_api_v1_partner_installations_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Enrollment"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/status":{"get":{"summary":"Status","operationId":"status_api_v1_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Status Api V1 Status Get"}}}}}}},"/api/v1/tropo/metadata":{"get":{"summary":"Tropo Metadata","operationId":"tropo_metadata_api_v1_tropo_metadata_get","parameters":[{"name":"model","in":"query","required":false,"schema":{"type":"string","pattern":"^[a-z0-9-]{2,32}$","default":"full","title":"Model"}},{"name":"area","in":"query","required":false,"schema":{"type":"string","pattern":"^(europe|poland|united-kingdom|germany|france|spain|italy|czechia|croatia|world)$","default":"europe","title":"Area"}},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^(icon-eu|gdps)$"},{"type":"null"}],"title":"Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Tropo Metadata Api V1 Tropo Metadata Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tropo/archive/metadata":{"get":{"summary":"Archive Metadata","operationId":"archive_metadata_api_v1_tropo_archive_metadata_get","parameters":[{"name":"date","in":"query","required":true,"schema":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","title":"Date"}},{"name":"model","in":"query","required":false,"schema":{"type":"string","pattern":"^[a-z0-9-]{2,32}$","default":"full","title":"Model"}},{"name":"area","in":"query","required":false,"schema":{"type":"string","pattern":"^(europe|poland|united-kingdom|germany|france|spain|italy|czechia|croatia|world)$","default":"europe","title":"Area"}},{"name":"source","in":"query","required":false,"schema":{"type":"string","pattern":"^(icon-eu|gdps)$","default":"icon-eu","title":"Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Archive Metadata Api V1 Tropo Archive Metadata Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Alert":{"properties":{"kind":{"type":"string","enum":["current","start","peak","weakening","none","no_data"],"title":"Kind"},"title":{"type":"string","title":"Title"},"message":{"type":"string","title":"Message"},"level":{"type":"string","enum":["normal","elevated","good","very_good","unknown"],"title":"Level"},"level_label":{"type":"string","title":"Level Label"},"details":{"type":"string","title":"Details"},"local_time":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Local Time"},"message_limit_exceeded":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Message Limit Exceeded"},"message_truncated":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Message Truncated"},"id":{"type":"string","title":"Id"},"valid_at":{"type":"string","title":"Valid At"},"offset_hour":{"type":"integer","title":"Offset Hour"},"score":{"type":"integer","title":"Score"},"coverage_percent":{"type":"number","title":"Coverage Percent"}},"type":"object","required":["kind","title","message","level","level_label","details","id","valid_at","offset_hour","score","coverage_percent"],"title":"Alert"},"ChartPreview":{"properties":{"country":{"anyOf":[{"type":"string","maxLength":2,"minLength":2},{"type":"null"}],"title":"Country"},"lat":{"anyOf":[{"type":"number","maximum":85.0,"minimum":-85.0},{"type":"null"}],"title":"Lat"},"lon":{"anyOf":[{"type":"number","maximum":180.0,"minimum":-180.0},{"type":"null"}],"title":"Lon"},"radius_km":{"type":"number","maximum":3500.0,"minimum":25.0,"title":"Radius Km","default":350},"source":{"type":"string","enum":["auto","icon-eu","gdps"],"title":"Source","default":"auto"},"period":{"type":"string","enum":["hours","now","today","tomorrow","next_24h","next_48h","next_72h","custom","next_3days"],"title":"Period","default":"next_72h"},"start_hour":{"type":"integer","maximum":240.0,"minimum":0.0,"title":"Start Hour","default":0},"end_hour":{"type":"integer","maximum":240.0,"minimum":0.0,"title":"End Hour","default":24},"step_hours":{"type":"string","enum":["3","6","12"],"title":"Step Hours","default":"3"},"language":{"type":"string","enum":["pl","en","de","fr","es","it","cs","hr"],"title":"Language","default":"en"},"timezone":{"type":"string","maxLength":64,"minLength":1,"title":"Timezone","default":"auto"},"dst_mode":{"type":"string","enum":["auto","summer","winter"],"title":"Dst Mode","default":"auto"},"time_format":{"type":"string","enum":["full","short"],"title":"Time Format","default":"short"},"threshold":{"type":"integer","maximum":95.0,"minimum":37.0,"title":"Threshold","default":65},"size":{"type":"string","pattern":"^\\d{2,4}x\\d{2,4}$","title":"Size","default":"320x240"},"highlight_limit":{"type":"integer","maximum":6.0,"minimum":1.0,"title":"Highlight Limit","default":3},"highlight_gap_hours":{"type":"integer","maximum":24.0,"minimum":3.0,"title":"Highlight Gap Hours","default":6},"format":{"type":"string","enum":["json","png","jpeg"],"title":"Format","default":"json"},"mode":{"type":"string","enum":["example","live"],"title":"Mode","default":"live"},"scenario":{"type":"string","enum":["current","start","peak","weakening","none","no_data"],"title":"Scenario","default":"start"}},"type":"object","title":"ChartPreview"},"CredentialRequest":{"properties":{"environment":{"type":"string","enum":["test","live"],"title":"Environment","default":"test"},"credential_type":{"type":"string","enum":["api","device"],"title":"Credential Type","default":"api"},"label":{"type":"string","maxLength":60,"minLength":2,"title":"Label","default":"Default"}},"type":"object","title":"CredentialRequest"},"DevicePreviewOptions":{"properties":{"lat":{"anyOf":[{"type":"number","maximum":85.0,"minimum":-85.0},{"type":"null"}],"title":"Lat"},"lon":{"anyOf":[{"type":"number","maximum":180.0,"minimum":-180.0},{"type":"null"}],"title":"Lon"},"country":{"anyOf":[{"type":"string","maxLength":2,"minLength":2},{"type":"null"}],"title":"Country"},"source":{"type":"string","enum":["auto","icon-eu","gdps"],"title":"Source","default":"auto"},"hours":{"items":{"type":"integer"},"type":"array","maxItems":12,"minItems":1,"title":"Hours"},"orientation":{"anyOf":[{"type":"string","enum":["landscape","portrait","square"]},{"type":"null"}],"title":"Orientation"},"aspect_ratio":{"anyOf":[{"type":"string","enum":["16:9","4:3","1:1","9:16","3:4"]},{"type":"null"}],"title":"Aspect Ratio"},"size":{"type":"string","pattern":"^\\d{2,4}x\\d{2,4}$","title":"Size","default":"320x240"},"radius_km":{"type":"number","maximum":3500.0,"minimum":25.0,"title":"Radius Km","default":350.0},"format":{"type":"string","enum":["jpeg","png"],"title":"Format","default":"jpeg"},"delivery":{"type":"string","enum":["frames","gif"],"title":"Delivery","default":"frames"},"renderer":{"type":"string","enum":["prepared-image","interactive-map"],"title":"Renderer","default":"interactive-map"},"title":{"type":"boolean","title":"Title","default":true},"model_name":{"type":"boolean","title":"Model Name","default":true},"time":{"type":"string","enum":["off","header","top","bottom"],"title":"Time","default":"bottom"},"timezone":{"type":"string","maxLength":64,"minLength":1,"title":"Timezone","default":"UTC"},"time_size":{"type":"string","enum":["small","normal","large"],"title":"Time Size","default":"normal"},"scale":{"type":"boolean","title":"Scale","default":false},"marker":{"type":"boolean","title":"Marker","default":true},"frame_duration_ms":{"type":"integer","maximum":5000.0,"minimum":250.0,"title":"Frame Duration Ms","default":1000},"loop":{"type":"boolean","title":"Loop","default":true}},"type":"object","title":"DevicePreviewOptions"},"Enrollment":{"properties":{"app_id":{"type":"string","maxLength":60,"minLength":20,"pattern":"^pa_[0-9a-f]+$","title":"App Id"},"installation_id":{"type":"string","maxLength":64,"minLength":32,"pattern":"^[A-Za-z0-9_-]+$","title":"Installation Id"},"enrollment_secret":{"type":"string","maxLength":128,"minLength":43,"pattern":"^[A-Za-z0-9_-]+$","title":"Enrollment Secret"}},"type":"object","required":["app_id","installation_id","enrollment_secret"],"title":"Enrollment"},"GoogleLoginRequest":{"properties":{"credential":{"type":"string","maxLength":8192,"minLength":100,"title":"Credential"}},"type":"object","required":["credential"],"title":"GoogleLoginRequest"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"LocationChartQuery":{"properties":{"lat":{"type":"number","maximum":85.0,"minimum":-85.0,"title":"Lat"},"lon":{"type":"number","maximum":180.0,"minimum":-180.0,"title":"Lon"},"radius_km":{"type":"number","maximum":350.0,"minimum":25.0,"title":"Radius Km","default":100},"source":{"type":"string","enum":["auto","icon-eu","gdps"],"title":"Source","default":"auto"},"period":{"type":"string","enum":["next_24h","next_48h","next_72h"],"title":"Period","default":"next_72h"},"language":{"type":"string","enum":["pl","en","de","fr","es","it","cs","hr"],"title":"Language","default":"en"},"timezone":{"type":"string","maxLength":64,"minLength":1,"title":"Timezone","default":"auto"}},"type":"object","required":["lat","lon"],"title":"LocationChartQuery"},"LoginRequest":{"properties":{"email":{"type":"string","maxLength":254,"minLength":5,"title":"Email"}},"type":"object","required":["email"],"title":"LoginRequest"},"Message":{"properties":{"kind":{"type":"string","enum":["current","start","peak","weakening","none","no_data"],"title":"Kind"},"title":{"type":"string","title":"Title"},"message":{"type":"string","title":"Message"},"level":{"type":"string","enum":["normal","elevated","good","very_good","unknown"],"title":"Level"},"level_label":{"type":"string","title":"Level Label"},"details":{"type":"string","title":"Details"},"local_time":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Local Time"},"message_limit_exceeded":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Message Limit Exceeded"},"message_truncated":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Message Truncated"}},"type":"object","required":["kind","title","message","level","level_label","details"],"title":"Message"},"PasskeyAuthenticationRequest":{"properties":{"challenge_id":{"type":"string","maxLength":64,"minLength":16,"title":"Challenge Id"},"credential":{"additionalProperties":true,"type":"object","title":"Credential"}},"type":"object","required":["challenge_id","credential"],"title":"PasskeyAuthenticationRequest"},"PasskeyRegistrationRequest":{"properties":{"challenge_id":{"type":"string","maxLength":64,"minLength":16,"title":"Challenge Id"},"label":{"type":"string","maxLength":60,"minLength":2,"title":"Label","default":"Administrator passkey"},"credential":{"additionalProperties":true,"type":"object","title":"Credential"}},"type":"object","required":["challenge_id","credential"],"title":"PasskeyRegistrationRequest"},"PreviewOptions":{"properties":{"lat":{"anyOf":[{"type":"number","maximum":85.0,"minimum":-85.0},{"type":"null"}],"title":"Lat"},"lon":{"anyOf":[{"type":"number","maximum":180.0,"minimum":-180.0},{"type":"null"}],"title":"Lon"},"country":{"anyOf":[{"type":"string","maxLength":2,"minLength":2},{"type":"null"}],"title":"Country"},"source":{"type":"string","enum":["auto","icon-eu","gdps"],"title":"Source","default":"auto"},"radius_km":{"type":"number","maximum":3500.0,"minimum":25.0,"title":"Radius Km","default":350},"hours":{"items":{"type":"integer"},"type":"array","maxItems":12,"minItems":1,"title":"Hours"},"period":{"type":"string","enum":["hours","now","today","tomorrow","next_24h","next_48h","next_72h","custom","next_3days"],"title":"Period","default":"hours"},"start_hour":{"type":"integer","maximum":240.0,"minimum":0.0,"title":"Start Hour","default":0},"end_hour":{"type":"integer","maximum":240.0,"minimum":0.0,"title":"End Hour","default":24},"step_hours":{"type":"integer","enum":[3,6,12],"title":"Step Hours","default":3},"language":{"type":"string","enum":["pl","en","de","fr","es","it","cs","hr"],"title":"Language","default":"en"},"timezone":{"type":"string","maxLength":64,"minLength":1,"title":"Timezone","default":"UTC"},"time_format":{"type":"string","enum":["full","short"],"title":"Time Format","default":"full"},"dst_mode":{"type":"string","enum":["auto","summer","winter"],"title":"Dst Mode","default":"auto"},"merge_bands":{"type":"boolean","title":"Merge Bands","default":false},"message_format":{"type":"string","enum":["full","short"],"title":"Message Format","default":"full"},"ascii_only":{"type":"boolean","title":"Ascii Only","default":false},"max_message_bytes":{"anyOf":[{"type":"integer","maximum":4096.0,"minimum":1.0},{"type":"null"}],"title":"Max Message Bytes"},"truncate_message":{"type":"boolean","title":"Truncate Message","default":false},"threshold":{"type":"integer","maximum":95.0,"minimum":37.0,"title":"Threshold","default":65},"label":{"type":"string","maxLength":80,"pattern":"^[^\\x00-\\x1f\\x7f]*$","title":"Label","default":""},"mode":{"type":"string","enum":["example","live"],"title":"Mode","default":"example"},"scenario":{"type":"string","enum":["current","start","peak","weakening","none","no_data"],"title":"Scenario","default":"start"}},"type":"object","title":"PreviewOptions"},"ProjectRequest":{"properties":{"name":{"type":"string","maxLength":80,"minLength":2,"title":"Name"}},"type":"object","required":["name"],"title":"ProjectRequest"},"RecoveryCodeRequest":{"properties":{"code":{"type":"string","maxLength":64,"minLength":12,"title":"Code"}},"type":"object","required":["code"],"title":"RecoveryCodeRequest"},"Sample":{"properties":{"offset_hour":{"type":"integer","title":"Offset Hour"},"forecast_hour":{"type":"integer","title":"Forecast Hour"},"valid_at":{"type":"string","title":"Valid At"},"score":{"type":"integer","title":"Score"},"coverage_percent":{"type":"number","title":"Coverage Percent"},"samples":{"type":"integer","title":"Samples"},"valid_sample_percent":{"type":"number","title":"Valid Sample Percent"},"sampling_stride":{"type":"integer","title":"Sampling Stride"},"interpolated":{"type":"boolean","title":"Interpolated"},"local_time":{"additionalProperties":true,"type":"object","title":"Local Time"}},"type":"object","required":["offset_hour","forecast_hour","valid_at","score","coverage_percent","samples","valid_sample_percent","sampling_stride","interpolated","local_time"],"title":"Sample"},"TextForecastResponse":{"properties":{"schema":{"type":"string","title":"Schema"},"mode":{"type":"string","enum":["live","example"],"title":"Mode"},"is_example":{"type":"boolean","title":"Is Example"},"generated_at":{"type":"string","title":"Generated At"},"language":{"type":"string","enum":["pl","en","de","fr","es","it","cs","hr"],"title":"Language"},"timezone":{"type":"string","title":"Timezone"},"time_format":{"type":"string","enum":["full","short"],"title":"Time Format"},"time_context":{"additionalProperties":true,"type":"object","title":"Time Context"},"merge_bands":{"type":"boolean","title":"Merge Bands","default":false},"location":{"additionalProperties":true,"type":"object","title":"Location"},"threshold":{"type":"integer","title":"Threshold"},"minimum_coverage_percent":{"type":"integer","title":"Minimum Coverage Percent"},"hours_requested":{"items":{"type":"integer"},"type":"array","title":"Hours Requested"},"period":{"additionalProperties":true,"type":"object","title":"Period"},"radio":{"additionalProperties":true,"type":"object","title":"Radio"},"daily":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Daily"},"outlook_text":{"type":"string","title":"Outlook Text"},"data_status":{"type":"string","enum":["complete","partial","no_data"],"title":"Data Status"},"missing":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Missing"},"summary":{"$ref":"#/components/schemas/Message"},"alerts":{"items":{"$ref":"#/components/schemas/Alert"},"type":"array","title":"Alerts"},"frames":{"items":{"$ref":"#/components/schemas/Sample"},"type":"array","title":"Frames"},"notes":{"items":{"type":"string"},"type":"array","title":"Notes"},"sampling":{"additionalProperties":true,"type":"object","title":"Sampling"},"scenario":{"anyOf":[{"type":"string","enum":["current","start","peak","weakening","none","no_data"]},{"type":"null"}],"title":"Scenario"},"developer_preview":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Developer Preview"}},"type":"object","required":["schema","mode","is_example","generated_at","language","timezone","time_format","time_context","location","threshold","minimum_coverage_percent","hours_requested","period","radio","daily","outlook_text","data_status","missing","summary","alerts","frames","notes","sampling"],"title":"TextForecastResponse"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}},"securitySchemes":{"TropocastDeviceKey":{"type":"apiKey","in":"header","name":"X-Tropocast-Key"}}}}